Python +numpy数组膨胀(填充)方法总结

您所在的位置:网站首页 python 数组的数组 Python +numpy数组膨胀(填充)方法总结

Python +numpy数组膨胀(填充)方法总结

2023-12-16 11:57| 来源: 网络整理| 查看: 265

本文主要介绍数组的各种填充方法,包括数组按照原值复制扩大并填充,数组的扩大填充,数组边缘填充等。

1.数组的复制膨胀

形如二维数组:

[[1 2]

[3 4]]

膨胀为:

[[1 1 1 2 2 2]  [1 1 1 2 2 2]  [1 1 1 2 2 2]  [3 3 3 4 4 4]  [3 3 3 4 4 4]  [3 3 3 4 4 4]]

实现方法:

array=np.array([[1,2],[3,4]]) array2=np.kron(array, np.ones((2, 2), dtype=array.dtype)) 2.数组的填充

Python编程中,当我们经常需要为数组进行填充时,numpy的np.pad函数提供了一个快速、高效的方法。

基本语法:

numpy.pad(array, pad_width, mode, **kwargs)

各参数的含义如下:

array:需要填充的数组pad_width:填充的宽度,可以是单个整数、单个整数元组、或者是多个整数元组mode:填充模式,可以是常数、symmetric等

下面我们来进行测试:

2.1 一维数组填充

 首先使用一维数组测试,代码如下:

array = np.array([1, 2, 3, 4, 5,6,7]) array2 = np.pad(a, (0, 5), 'constant', constant_values=(0, 0))

运行结果:array2 [1 2 3 4 5 6 7 0 0 0 0 0]

改为一下参数:

array2 = np.pad(array, (2, 5), 'constant', constant_values=(0, 0))

运行结果:array2 [0 0 1 2 3 4 5 6 7 0 0 0 0 0]  前面填充两个0,后面填充5个0.

前面填充8,后面填充9:

array2 = np.pad(array, (2, 5), 'constant', constant_values=(8, 9))

运行结果:array2 [8 8 1 2 3 4 5 6 7 9 9 9 9 9]

2.2 二维数组填充 

 示例:

array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 5),(2, 5)), 'constant', constant_values=(8, 9)) print('array2',array2)

运行结果:

array2

[[8 8 8 8 8 9 9 9 9 9]  [8 8 8 8 8 9 9 9 9 9]  [8 8 1 2 3 9 9 9 9 9]  [8 8 4 5 6 9 9 9 9 9]  [8 8 7 8 9 9 9 9 9 9]  [8 8 9 9 9 9 9 9 9 9]  [8 8 9 9 9 9 9 9 9 9]  [8 8 9 9 9 9 9 9 9 9]  [8 8 9 9 9 9 9 9 9 9]  [8 8 9 9 9 9 9 9 9 9]]

2.3 其他方式填充,边缘填充

除了常数模式之外,np.pad函数还支持其他几种填充模式,例如:

symmetric:对称填充,填充部分是源数组的镜像edge:边缘填充,以数组的边缘元素进行填充minimum/maximum:最小值/最大值填充,将数组填充至源数组的最小值或最大值

我们也可以结合使用多种填充模式,例如进行边缘填充:

array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 2),(2, 2)), mode='edge') print('array2',array2)

 运行结果:array2

[[1 1 1 2 3 3 3]  [1 1 1 2 3 3 3]  [1 1 1 2 3 3 3]  [4 4 4 5 6 6 6]  [7 7 7 8 9 9 9]  [7 7 7 8 9 9 9]  [7 7 7 8 9 9 9]]

最大值填充:

array=np.array([[1,2,3],[4,5,6],[7,8,9]]) array2 = np.pad(array, ((2, 2),(2, 2)), mode='maximum') print('array2',array2)

运行结果:array2

[[9 9 7 8 9 9 9]  [9 9 7 8 9 9 9]  [3 3 1 2 3 3 3]  [6 6 4 5 6 6 6]  [9 9 7 8 9 9 9]  [9 9 7 8 9 9 9]  [9 9 7 8 9 9 9]] 

对于边缘填充,我们还可以采用如下方法:

import numpy as np def array_expand(array,expand_size): # 获取原始数组尺寸 height, width = array.shape # 创建新的扩展后的数组 expanded_array = np.zeros((height + expand_size+1, width + expand_size+1), dtype=array.dtype) # 复制原始数组到新数组的内部区域 expanded_array[1:-1, 1:-1] = array # 将原数组的上下左右四周扩展 expanded_array[0, 1:-1] = array[0, :] # 复制第一行 expanded_array[-1, 1:-1] = array[-1, :] # 复制最后一行 expanded_array[1:-1, 0] = array[:, 0] # 复制第一列 expanded_array[1:-1, -1] = array[:, -1] # 复制最后一列 expanded_array[0, 0] = array[0, 0] # 左上角像素 expanded_array[0, -1] = array[0, -1] # 右上角像素 expanded_array[-1, 0] = array[-1, 0] # 左下角像素 expanded_array[-1, -1] = array[-1, -1] # 右下角像素 # 返回扩展后的数组 return expanded_array array=np.array([[1,2,3],[4,5,6],[7,8,9]]) windows_size=7 for i in range(0 ,windows_size//2): array = array_expand(array, 1) print(array)

windows_size是进行卷积运算时候窗口的大小。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3